
#ifndef TD_GAME_CORE_H_
#define TD_GAME_CORE_H_

/************************************************************************/
/* STL                                                                  */
/************************************************************************/
#include <map>
#include <string>
using namespace std;


/************************************************************************/
/* Game core values                                                     */
/************************************************************************/

namespace TD_Game {

	const static float frameRate = 60.0;

	#ifdef _WII
		const static string resourcesRoot = "sd:/apps/MarioTD/resources/";
		const static string resourcesImgPath = "640x480/";
		const static unsigned int screenWidth = 640;
		const static unsigned int screenHeight = 480;
	#endif
	#ifdef WIN32_256x192
		const static string resourcesRoot = "resources/"
		const static string resourcesImgPath = "256x192/";
		const static unsigned int screenWidth = 256;
		const static unsigned int screenHeight = 192;
	#endif
	#ifdef WIN32
		#ifdef CR_640x480
			const static string resourcesRoot = "resources/";
			const static string resourcesImgPath = "640x480/";
			const static unsigned int screenWidth = 640;
			const static unsigned int screenHeight = 480;
		#else
			const static string resourcesRoot = "resources/";
			const static string resourcesImgPath = "1024x768/";
			const static unsigned int screenWidth = 1024;
			const static unsigned int screenHeight = 768;
		#endif
	#endif
			
	

	typedef enum {
		atEntryScreen,
		playingGameArea,
		gamePaused,
		invalidArea,
		gameOverArea
	} gameArea;

	typedef enum {
		Sleeping_Bowser,
		Magikoopa,
		Snifit,
		Shyguy,
		Lakitu
	} bowserTypes;

	typedef enum {
		//Ness SPM1
		NES_Small_Mario_SPM1,
		NES_Big_Mario_SPM1,
		NES_Fire_Mario_SPM1,

		//Ness SPM2
		NES_Small_Mario_SPM2,
		NES_Big_Mario_SPM2,
		NES_Nabo_Mario_SPM2,

		//Ness SPM3
		NES_Small_Mario_SPM3,
		NES_Big_Mario_SPM3,
		NES_Rolling_Mario_SPM3,
		NES_Tail_Mario_SPM3,
		NES_Fire_Mario_SPM3,
		NES_Fox_Mario_SPM3,
		NES_Frog_Mario_SPM3,
		NES_Shell_Mario_SPM3,

		SNES_Small_Mario,
		SNES_Big_Mario,
		SNES_Big_Mario_Running,
		SNES_Hammer_Mario,
		SNES_Flower_Mario,
		SNES_Flying_Mario1,
		SNES_Flying_Mario2,
		SNES_Flying_Mario3,

		SNES_Big_Mario_Doc,
		SNES_Big_Mario_Running_Doc,
		SNES_Flying_Mario_Doc,
		SNES_Flying_Mario_Doc2,
		SNES_Flying_Mario_Doc3,
      SNES_Luigi,
      SNES_Luigi_Running,
      SNES_Peach,
      SNES_Peach_Running,
      SNES_Princess,
      SNES_Princess_Running,
      NES_Small_Luigi,
      NES_Luigi,
      NES2_Luigi,
      NES2_Toad,
      NES2_Peach,
      NES3_Small_Luigi,
      NES3_Luigi,
      NES3_Luigi_Running,
      NES3_Tail_Luigi,
      NES3_Tail_Luigi_Running,
      Megaman,
      Cutman,
      Protoman,
      WhiteBomberman,
      BlackBomberman,
      Sonic,
      Sonic_Rolling,

		Mario_MarioRPGAS
	} marioTypes;

	typedef enum {
		TurtleShell,
		LightBall,

		/**Spine shell*/
		spineShell_lvl1,
		spineShell_lvl2,
		spineShell_lvl3,
		spineShell_lvl4,
		spineShell_lvl5,
		spineShell_lvl6,

		/**Pellet shot */
		pelletShot_lvl1,
		pelletShot_lvl2,
		pelletShot_lvl3,
		pelletShot_lvl4,
		pelletShot_lvl5,
		pelletShot_lvl6,

		/**Magikoopa shot*/
		magikoopaShot_lvl1,
		magikoopaShot_lvl2,
		magikoopaShot_lvl3,
		magikoopaShot_lvl4,
		magikoopaShot_lvl5,
		magikoopaShot_lvl6,

		/**Ice shot*/
		iceShot_lvl1,
		iceShot_lvl2,
		iceShot_lvl3,
		iceShot_lvl4,
		iceShot_lvl5,
		iceShot_lvl6,

		/**Fire shot*/
		fireShot_lvl1,
		fireShot_lvl2,
		fireShot_lvl3,
		fireShot_lvl4,
		fireShot_lvl5,
		fireShot_lvl6

	} shotTypes;

	typedef enum {
		ancientTower,
		/**Snifit*/
		snifitTower_lvl1,
		snifitTower_lvl2,
		snifitTower_lvl3,
		snifitTower_lvl4,
		snifitTower_lvl5,
		snifitTower_lvl6,

		/** Magikoopa*/
		magikoopaTower_lvl1,
		magikoopaTower_lvl2,
		magikoopaTower_lvl3,
		magikoopaTower_lvl4,
		magikoopaTower_lvl5,
		magikoopaTower_lvl6,

		/** FlowerTower*/
		flowerTower_lvl1,
		flowerTower_lvl2,
		flowerTower_lvl3,
		flowerTower_lvl4,
		flowerTower_lvl5,
		flowerTower_lvl6,

		/** Shyguy*/
		shyguyTower_lvl1,
		shyguyTower_lvl2,
		shyguyTower_lvl3,
		shyguyTower_lvl4,
		shyguyTower_lvl5,
		shyguyTower_lvl6,

		/** Lakitu*/
		lakituTower_lvl1,
		lakituTower_lvl2,
		lakituTower_lvl3,
		lakituTower_lvl4,
		lakituTower_lvl5,
		lakituTower_lvl6,

		insertTower,
		insertInvalidTower
	} towerTypes;

	
}

#endif